diff --git a/README.md b/README.md
index e69de29..ed40216 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1,163 @@
+# Tiesībsarga biroja iesnieguma izskatīšanas process
+
+UAPF package: `lv.tiesibsargs.iesnieguma-izskatisana@0.1.0`
+
+An algorithmated complaint-intake and triage process for the Office of the Ombudsman of Latvia (Tiesībsarga birojs). Fetches an incoming citizen complaint (iesniegums), redacts PII before AI processing, extracts structured facts with an AI capability, runs three deterministic DMN decisions to classify the topic / determine priority / route to the appropriate department, persists the classification record, and emits a domain event. Human assignment, response drafting, and case closure remain in the host document management system.
+
+This package is the worked example for the AI-Assisted Case Management profile of [UAPF-IP v0.1](https://github.com/UAPFormat/UAPF-IP).
+
+## Scope and constraints
+
+This package conforms to the UAPF-IP v0.1 *Orchestrated Process* profile and the v0.1 reference engine's BPMN walker — which means **linear flows only**, no gateways, no user tasks inside the process itself. The deliberate consequence: the UAPF process produces a *recommendation* (classification + priority + routing); the actual human assignment and response work happens in OpenDMS workflows outside the UAPF execution boundary. This is the right shape for a v0.1 demo and the right separation of concerns regardless — UAPF holds the algorithm; the DMS holds the human workflow.
+
+## Flow
+
+```
+Start
+ └─> [service] document.fetch — retrieve the iesniegums from the DMS
+ └─> [service] ai.redact — strip PII before any AI invocation
+ └─> [service] ai.extract — produce structured facets per the guardrails-allowed schema
+ └─> [rules] classify-topic — DMN: facets → canonical topic
+ └─> [rules] determine-priority — DMN: topic + indicators → priority + SLA
+ └─> [rules] route-to-department — DMN: topic → department + reviewer role
+ └─> [service] data.write — persist the classification record
+ └─> [service] event.emit — publish "iesniegums.classified"
+ └─> End
+```
+
+Nine sequence flows, ten nodes, linear. Three service tasks invoke host capabilities. Three business-rule tasks invoke embedded DMN. Two final service tasks record and emit.
+
+## Capabilities required
+
+The host must implement at least these to load and execute this package:
+
+| Capability | Used at | Purpose |
+|---|---|---|
+| `document.fetch@1+` | step `FetchDocument` | Return the iesniegums body + metadata by DID |
+| `ai.redact@1+` | step `RedactPii` | Detect and redact personas_kods, addresses, names, financial, health |
+| `ai.extract@1+` | step `ExtractFacets` | Return the boolean facet schema below |
+| `data.write@1+` | step `RecordClassification` | Persist the classification + routing record |
+| `event.emit@1+` | step `EmitClassifiedEvent` | Publish "iesniegums.classified" to the host's event bus |
+
+## Facet schema (what ai.extract must return)
+
+```json
+{
+ "mentionsChildren": true,
+ "mentionsDiscrimination": false,
+ "mentionsPrisons": false,
+ "mentionsPolice": false,
+ "mentionsHealth": false,
+ "mentionsSocialServices": true,
+ "mentionsPrivacy": false,
+ "mentionsPublicAdministration": false,
+ "vulnerablePerson": true,
+ "urgency": false,
+ "ongoingHarm": false,
+ "languageDetected": "lv"
+}
+```
+
+The DMN tables consume those booleans plus a `topic` string flowing between them. Output schema after the full process completes:
+
+```json
+{
+ "topic": "child-rights",
+ "topicConfidence": 0.92,
+ "priority": "high",
+ "slaHours": 168,
+ "department": "Bērna tiesību nodaļa",
+ "reviewerRole": "berna-tiesibu-jurists"
+}
+```
+
+## Guardrails
+
+See [`resources/guardrails.yaml`](./resources/guardrails.yaml). Highlights:
+
+- AI is **advisory only**. `decisions_ai_may_make_unattended` is empty by design.
+- PII redaction is required before any AI invocation. `personas_kods`, bank accounts, exact addresses, children's names, and health record numbers are forbidden from AI input.
+- Allowed models: Claude Opus 4.7, Claude Sonnet 4.6 (Extended Thinking).
+- Human oversight required for final classification acceptance, response dispatch, and case closure.
+- Audit retention: 10 years for the VC chain, 2 years for AI invocation logs.
+
+## Files
+
+```
+lv.tiesibsargs.iesnieguma-izskatisana/
+├── manifest.json
+├── README.md (this file)
+├── bpmn/
+│ └── iesnieguma-izskatisana.bpmn.xml Process flow (linear, 10 nodes)
+├── dmn/
+│ ├── classify-topic.dmn.xml 9 rules, FIRST hit policy
+│ ├── determine-priority.dmn.xml 6 rules, FIRST hit policy
+│ └── route-to-department.dmn.xml 9 rules, UNIQUE hit policy
+├── resources/
+│ ├── guardrails.yaml Policy snapshot for session
+│ ├── tiesibsargs-taxonomy.yaml Canonical topic list + legal anchors
+│ └── department-roster.yaml Department-to-topic-to-role mapping
+├── fixtures/
+│ ├── sample-good-governance-complaint.json
+│ ├── sample-child-rights-complaint.json
+│ └── sample-discrimination-complaint.json
+├── tests/
+│ └── expected-classifications.json Expected DMN outputs per fixture
+└── docs/
+ ├── 00-overview.md
+ ├── 01-legal-basis.md
+ └── 02-ai-act-classification.md
+```
+
+## Building and loading
+
+```bash
+# Package as a UAPF zip
+cd lv.tiesibsargs.iesnieguma-izskatisana
+zip -r ../lv.tiesibsargs.iesnieguma-izskatisana-0.1.0.uapf .
+
+# Drop into a uapf-engine packages directory
+cp lv.tiesibsargs.iesnieguma-izskatisana-0.1.0.uapf /path/to/uapf-engine/packages/
+
+# Or push to ProcessGit for governed distribution
+git push https://USER:TOKEN@processgit.org/Tiesibsargs/iesnieguma-izskatisana.git main
+```
+
+## Running against the engine
+
+Once loaded into a `uapf-engine` instance and a UAPF-IP-conformant host is reachable, invoke with:
+
+```bash
+curl -X POST http://uapf-engine:4000/uapf/start-session \
+ -H "Content-Type: application/json" \
+ -d '{
+ "packageId": "lv.tiesibsargs.iesnieguma-izskatisana",
+ "packageVersion": "0.1.0",
+ "processId": "iesnieguma-izskatisana",
+ "input": {
+ "documentDid": "did:doc:tiesibsargs:2026-0518"
+ },
+ "hostManifest": {
+ "hostDid": "did:web:tiesibsargs.opendms.dev",
+ "hostBaseUrl": "https://tiesibsargs.opendms.dev",
+ "profiles": ["uapf-ip-orchestrated"],
+ "capabilities": [
+ { "namespace": "document", "operation": "fetch", "version": 1 },
+ { "namespace": "ai", "operation": "redact", "version": 1 },
+ { "namespace": "ai", "operation": "extract","version": 1 },
+ { "namespace": "data", "operation": "write", "version": 1 },
+ { "namespace": "event", "operation": "emit", "version": 1 }
+ ]
+ }
+ }'
+```
+
+## Status
+
+- v0.1 draft. Ready for first integration against OpenDMS under the MIC AI regulatory sandbox.
+- DMN tables hand-tuned from the Tiesībsarga 2025 annual report category distribution; should be refined with real complaint data once the sandbox protocol allows.
+- The `ai.extract` facet schema is the spot most likely to evolve. Treat it as a contract between this package and whatever AI model serves the capability.
+
+## License
+
+MIT.
diff --git a/bpmn/iesnieguma-izskatisana.bpmn.xml b/bpmn/iesnieguma-izskatisana.bpmn.xml
new file mode 100644
index 0000000..8e8b8af
--- /dev/null
+++ b/bpmn/iesnieguma-izskatisana.bpmn.xml
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dmn/classify-topic.dmn.xml b/dmn/classify-topic.dmn.xml
new file mode 100644
index 0000000..ab57891
--- /dev/null
+++ b/dmn/classify-topic.dmn.xml
@@ -0,0 +1,144 @@
+
+
+
+
+
+ mentionsChildren
+
+
+ mentionsDiscrimination
+
+
+ mentionsPrisons
+
+
+ mentionsPolice
+
+
+ mentionsHealth
+
+
+ mentionsSocialServices
+
+
+ mentionsPrivacy
+
+
+ mentionsPublicAdministration
+
+
+
+
+
+ true
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ "child-rights"
+ 0.92
+
+
+ -
+ true
+ -
+ -
+ -
+ -
+ -
+ -
+ "discrimination"
+ 0.9
+
+
+ -
+ -
+ true
+ -
+ -
+ -
+ -
+ -
+ "prisoner-rights"
+ 0.88
+
+
+ -
+ -
+ -
+ true
+ -
+ -
+ -
+ -
+ "law-enforcement-rights"
+ 0.85
+
+
+ -
+ -
+ -
+ -
+ true
+ -
+ -
+ -
+ "health-rights"
+ 0.87
+
+
+ -
+ -
+ -
+ -
+ -
+ true
+ -
+ -
+ "social-rights"
+ 0.85
+
+
+ -
+ -
+ -
+ -
+ -
+ -
+ true
+ -
+ "privacy-rights"
+ 0.83
+
+
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ true
+ "good-governance"
+ 0.78
+
+
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+ "other"
+ 0.5
+
+
+
+
diff --git a/dmn/determine-priority.dmn.xml b/dmn/determine-priority.dmn.xml
new file mode 100644
index 0000000..6b2c842
--- /dev/null
+++ b/dmn/determine-priority.dmn.xml
@@ -0,0 +1,73 @@
+
+
+
+
+
+ ongoingHarm
+
+
+ urgency
+
+
+ vulnerablePerson
+
+
+ topic
+
+
+
+
+
+
+ true
+ -
+ -
+ -
+ "urgent"
+ 24
+
+
+ -
+ true
+ true
+ -
+ "urgent"
+ 48
+
+
+ -
+ -
+ -
+ "child-rights"
+ "high"
+ 168
+
+
+ -
+ -
+ -
+ "prisoner-rights"
+ "high"
+ 168
+
+
+ -
+ true
+ -
+ -
+ "high"
+ 168
+
+
+ -
+ -
+ -
+ -
+ "normal"
+ 720
+
+
+
+
diff --git a/dmn/route-to-department.dmn.xml b/dmn/route-to-department.dmn.xml
new file mode 100644
index 0000000..6fbeb82
--- /dev/null
+++ b/dmn/route-to-department.dmn.xml
@@ -0,0 +1,60 @@
+
+
+
+
+
+ topic
+
+
+
+
+
+ "child-rights"
+ "Bērna tiesību nodaļa"
+ "berna-tiesibu-jurists"
+
+
+ "discrimination"
+ "Diskriminācijas novēršanas nodaļa"
+ "diskriminacijas-jurists"
+
+
+ "prisoner-rights"
+ "Pilsonisko un politisko tiesību nodaļa"
+ "pilsonisko-tiesibu-jurists"
+
+
+ "law-enforcement-rights"
+ "Pilsonisko un politisko tiesību nodaļa"
+ "pilsonisko-tiesibu-jurists"
+
+
+ "health-rights"
+ "Sociālo, ekonomisko un kultūras tiesību nodaļa"
+ "socialo-tiesibu-jurists"
+
+
+ "social-rights"
+ "Sociālo, ekonomisko un kultūras tiesību nodaļa"
+ "socialo-tiesibu-jurists"
+
+
+ "privacy-rights"
+ "Pilsonisko un politisko tiesību nodaļa"
+ "pilsonisko-tiesibu-jurists"
+
+
+ "good-governance"
+ "Vispārējās uzraudzības nodaļa"
+ "visparejas-uzraudzibas-jurists"
+
+
+ "other"
+ "Klientu apkalpošanas centrs"
+ "klientu-apkalposanas-specialists"
+
+
+
+
diff --git a/docs/00-overview.md b/docs/00-overview.md
new file mode 100644
index 0000000..0c8574a
--- /dev/null
+++ b/docs/00-overview.md
@@ -0,0 +1,23 @@
+# Overview
+
+## What this package does
+
+Receives an incoming citizen complaint to the Office of the Ombudsman of Latvia, classifies it by topic, computes a priority, and routes it to the right department — all algorithmically, with audit trail, under explicit AI guardrails.
+
+It does **not** assign the complaint to a specific human reviewer, draft a response, or close the case. Those operations require human judgment and stay in the host DMS.
+
+## Why algorithmate this process
+
+The 2025 Tiesībsarga annual report disclosed a record 2,499 complaints, +28% year on year. The largest category — violations of the good-governance principle — accounted for ~603 cases. With current case-handling capacity flat, manual classification and routing are a structural bottleneck.
+
+Algorithmating the *classification and routing* portion of the process keeps the algorithm explicit (DMN, versioned in ProcessGit), keeps the AI invocation bounded and audited (guardrails-as-code), and frees jurists' time for the parts of the work that genuinely need human judgment.
+
+## Where this package fits
+
+In the UAPF-IP v0.1 architecture:
+- The **runtime** (`uapf-engine`) loads and walks this package.
+- The **host** (OpenDMS deployed for Tiesībsargs) provides the five capabilities and consumes the resulting classification.
+- The **audit chain** is signed by both sides (DID-VC, deferred to v0.2; v0.1 uses bearer token).
+- The whole orchestration runs under the [Latvian AI regulatory sandbox programme](https://www.ailatvia.lv).
+
+The package is the algorithmic artefact. The runtime is the executor. The host is the workflow. ProcessGit is the source-of-truth distribution channel. Four separable concerns; this package owns one of them.
diff --git a/docs/01-legal-basis.md b/docs/01-legal-basis.md
new file mode 100644
index 0000000..6c0ca82
--- /dev/null
+++ b/docs/01-legal-basis.md
@@ -0,0 +1,23 @@
+# Legal basis
+
+The algorithmated portion of this process operates inside the following legal framework.
+
+## Latvian law
+
+- **Iesniegumu likums** — citizens have a right to address public authorities and receive a substantive answer. This package automates the *intake and triage* portion of fulfilling that right; the substantive answer remains the responsibility of a jurist.
+- **Tiesībsarga likums** — defines the mandate of the Ombudsman, including the categories of cases the Office can investigate. The taxonomy in `resources/tiesibsargs-taxonomy.yaml` mirrors the categories used in the Office's own annual reporting.
+- **Administratīvā procesa likums, 4. pants** — the good-governance principle that defines the largest topic category in the report.
+
+## Data protection
+
+- **Vispārīgā datu aizsardzības regula (GDPR)** — Articles 5 (lawfulness, fairness, transparency), 22 (automated individual decision-making), 35 (DPIA for high-risk processing).
+- **Fizisko personu datu aizsardzības likums** — the Latvian implementation.
+- Specifically: this process never makes a final substantive decision affecting a citizen (`decisions_ai_may_make_unattended` is empty). It produces a recommendation reviewed by a human jurist before any external action. This keeps the process outside the strictest scope of GDPR Art. 22.
+
+## EU AI Act
+
+See [`02-ai-act-classification.md`](./02-ai-act-classification.md).
+
+## Sandbox basis
+
+The package operates under the Latvian AI regulatory sandbox programme established by MIC (Mākslīgā intelekta centrs), in coordination with VARAM and DVI. The specific scope is documented in the administrative act issued for the project; the technical scope is defined by `resources/guardrails.yaml` in this package.
diff --git a/docs/02-ai-act-classification.md b/docs/02-ai-act-classification.md
new file mode 100644
index 0000000..7b9f59c
--- /dev/null
+++ b/docs/02-ai-act-classification.md
@@ -0,0 +1,37 @@
+# EU AI Act classification
+
+## Summary
+
+This system is classified as **high-risk** under the EU AI Act. The classification anchors on multiple Annex III categories rather than a single one — a deliberate framing taken in the sandbox application, because the classification ambiguity itself justifies sandbox testing.
+
+## Annex III mapping
+
+- **§5(a) — access to and enjoyment of essential public services.** When the system classifies a citizen complaint and routes it to a department, it materially affects *how* the citizen's right to be heard by the Ombudsman is fulfilled. The system does not control *whether* the citizen has access (any complaint reaches the Ombudsman regardless), but it shapes the path through the Office.
+- **§8(a) — administration of justice and democratic processes.** The Ombudsman exercises a quasi-judicial function — investigating complaints against public administration. AI systems that interpret normative acts (Iesniegumu likums, MK noteikumi) and apply them to concrete facts fall squarely under this category.
+
+## Article 6(3) preparatory-task argument
+
+The package's role can also be framed under Article 6(3)(c): a system that performs "a preparatory task to an assessment relevant for the purposes of the use cases listed in Annex III." When a public authority uses this package to algorithmate its complaint-handling process, the package is the *preparatory infrastructure*. Article 6 explicitly classifies such systems as high-risk.
+
+The derogation in Article 6(3) — "merely detects decision-making patterns... and is not meant to replace or influence the previously completed human assessment" — does **not** apply here, because the package is explicitly meant to influence the human classification (and, in regulated cases, may eventually replace it for the simplest topics).
+
+## Why this classification is appropriate
+
+Three reasons:
+
+1. **The outputs influence rights-related processes.** Even though no final administrative decision is automated, the priority and routing determine how quickly and by whom a citizen's complaint is examined. Wrong routing delays the response.
+2. **The data is sensitive.** Complaints often disclose personal information about health, family situations, financial hardship, discrimination, or interactions with law enforcement. Even with redaction, the system processes information that demands the highest data-protection care.
+3. **The reasoning is contestable.** A citizen has a right to understand how their complaint was classified. The DMN tables are auditable in a way that an opaque AI classifier wouldn't be — which is precisely why the system was structured this way.
+
+## What the sandbox protocol assesses
+
+The sandbox testing aims to validate, with regulator supervision (VARAM, DVI):
+
+- That the guardrails policy is enforceable in code and audited at every AI invocation.
+- That the audit chain is sufficient for a citizen requesting an explanation under GDPR Art. 15 or for a regulator under AI Act compliance review.
+- That the classification accuracy on real (anonymised) complaint data is materially better than human-only baseline, and that the error patterns are bounded and predictable.
+- That the human oversight required by Art. 14 is meaningful — that jurists genuinely have the information and time to review AI recommendations rather than rubber-stamping them.
+
+## What we are not claiming
+
+This package does not claim to make legally binding decisions. It does not claim to replace jurists. It does not claim to handle constitutional-rights cases without human review. It claims, narrowly, to make the intake and triage portion of the process algorithmically explicit, auditable, and faster.
diff --git a/fixtures/sample-child-rights-complaint.json b/fixtures/sample-child-rights-complaint.json
new file mode 100644
index 0000000..8cd186d
--- /dev/null
+++ b/fixtures/sample-child-rights-complaint.json
@@ -0,0 +1,15 @@
+{
+ "documentDid": "did:doc:tiesibsargs:2026-0518",
+ "receivedAt": "2026-05-18T15:42:00+03:00",
+ "channel": "ePasts",
+ "subject": "Bērna aizgādības tiesību pārkāpums",
+ "body": "Sveiki, sazinos vārdā vecmāmiņai. Mans mazbērns ir bāriņtiesas uzraudzībā. Bāriņtiesas lēmums tika pieņemts steigā, mēs nesaņēmām iespēju izskaidrot situāciju, un bērns šobrīd atrodas ārpus ģimenes aprūpē jau divus mēnešus. Lūdzu Jūsu palīdzību. Mūsu reģiona bāriņtiesa neatbild uz mūsu pieprasījumiem. Bērns ir piecus gadus vecs un vēlas atgriezties pie vecākiem.",
+ "submitter": {
+ "type": "individual",
+ "languageCode": "lv"
+ },
+ "expectedTopic": "child-rights",
+ "expectedPriority": "high",
+ "expectedDepartment": "Bērna tiesību nodaļa",
+ "fixtureNotes": "Synthetic. Mentions: children=true, vulnerablePerson=true (5-year-old). Should classify as child-rights and route to Bērna tiesību nodaļa. Priority 'high' because topic is child-rights (rule P3)."
+}
diff --git a/fixtures/sample-discrimination-complaint.json b/fixtures/sample-discrimination-complaint.json
new file mode 100644
index 0000000..1c7c10c
--- /dev/null
+++ b/fixtures/sample-discrimination-complaint.json
@@ -0,0 +1,15 @@
+{
+ "documentDid": "did:doc:tiesibsargs:2026-0519",
+ "receivedAt": "2026-05-19T11:05:00+03:00",
+ "channel": "Pasta sūtījums",
+ "subject": "Diskriminācija darba vietā",
+ "body": "Esmu Latvijas pilsonis ar invaliditāti (otrā grupa). Pieteicos darbam valsts iestādē, manas profesionālās kvalifikācijas pilnībā atbilst prasībām. Tomēr intervijas laikā darba devējs atklāti pateica, ka 'nevaram pieņemt cilvēkus ar īpašām vajadzībām, jo nav pieejama vide'. Tas ir tieša diskriminācija. Lūdzu Tiesībsargu izmeklēt šo gadījumu.",
+ "submitter": {
+ "type": "individual",
+ "languageCode": "lv"
+ },
+ "expectedTopic": "discrimination",
+ "expectedPriority": "high",
+ "expectedDepartment": "Diskriminācijas novēršanas nodaļa",
+ "fixtureNotes": "Synthetic. Mentions: discrimination=true, vulnerablePerson=true (disability), urgency=true (ongoing job-seeking situation). Should classify as discrimination."
+}
diff --git a/fixtures/sample-good-governance-complaint.json b/fixtures/sample-good-governance-complaint.json
new file mode 100644
index 0000000..82adaea
--- /dev/null
+++ b/fixtures/sample-good-governance-complaint.json
@@ -0,0 +1,15 @@
+{
+ "documentDid": "did:doc:tiesibsargs:2026-0517",
+ "receivedAt": "2026-05-17T08:14:00+03:00",
+ "channel": "eAdrese",
+ "subject": "Sūdzība par būvvaldes lēmumu",
+ "body": "Cienījamais tiesībsarg, esmu vērsies pie pašvaldības būvvaldes ar lūgumu pārskatīt manas mājas pārbūves atļauju. Atbilde, kuru saņēmu, nesatur pamatojumu, un būvvaldes amatpersonas nav atbildējušas uz manām e-pastiem trīs mēnešus. Uzskatu, ka tas pārkāpj labas pārvaldības principu un Administratīvā procesa likuma 4. pantu. Lūdzu Tiesībsargu pārbaudīt šo gadījumu.",
+ "submitter": {
+ "type": "individual",
+ "languageCode": "lv"
+ },
+ "expectedTopic": "good-governance",
+ "expectedPriority": "normal",
+ "expectedDepartment": "Vispārējās uzraudzības nodaļa",
+ "fixtureNotes": "Synthetic. No real PII. Tests the most common topic (good-governance, ~24% of 2025 complaint volume per Tiesībsarga annual report)."
+}
diff --git a/manifest.json b/manifest.json
new file mode 100644
index 0000000..a8d73e9
--- /dev/null
+++ b/manifest.json
@@ -0,0 +1,47 @@
+{
+ "id": "lv.tiesibsargs.iesnieguma-izskatisana",
+ "name": "Tiesībsarga biroja iesnieguma izskatīšanas process",
+ "description": "Algorithmated complaint intake and triage for the Office of the Ombudsman of Latvia. Fetches an incoming iesniegums, redacts PII before AI processing, extracts structured facets, classifies the topic, determines priority, routes to the appropriate department, persists the classification record, and emits a domain event. Human assignment and response drafting remain in the host DMS.",
+ "version": "0.1.0",
+ "level": 4,
+ "owners": [
+ {
+ "type": "organisation",
+ "id": "lv.tiesibsargs",
+ "contact": "info@tiesibsargs.lv"
+ }
+ ],
+ "lifecycle": "draft",
+ "cornerstones": {
+ "bpmn": true,
+ "dmn": true,
+ "cmmn": false,
+ "resources": true
+ },
+ "paths": {
+ "bpmn": "bpmn",
+ "dmn": "dmn",
+ "resources": "resources",
+ "fixtures": "fixtures",
+ "tests": "tests",
+ "docs": "docs"
+ },
+ "requires_capabilities": [
+ "document.fetch@1+",
+ "ai.redact@1+",
+ "ai.extract@1+",
+ "data.write@1+",
+ "event.emit@1+"
+ ],
+ "profiles_supported": [
+ "uapf-ip-orchestrated"
+ ],
+ "guardrails": "resources/guardrails.yaml",
+ "legal_basis": [
+ "Iesniegumu likums",
+ "Tiesībsarga likums",
+ "Administratīvā procesa likums",
+ "Vispārīgā datu aizsardzības regula (GDPR)"
+ ],
+ "eu_ai_act_classification": "Annex III §5(a) and §8(a) — high-risk per the multi-category framing in the AI sandbox application; classification subject to refinement under MIC sandbox testing"
+}
diff --git a/resources/department-roster.yaml b/resources/department-roster.yaml
new file mode 100644
index 0000000..945123d
--- /dev/null
+++ b/resources/department-roster.yaml
@@ -0,0 +1,43 @@
+# Department roster — referenced by route-to-department DMN.
+# In production, this is fetched via data.read from the host's HR or org-chart system.
+# In v0.1 demo, it's a static reference resource.
+
+version: 1.0.0
+
+departments:
+ - id: berna-tiesibu-nodala
+ name: "Bērna tiesību nodaļa"
+ handles_topics: [child-rights]
+ primary_role: "berna-tiesibu-jurists"
+ escalation_role: "nodalas-vaditajs"
+
+ - id: diskriminacijas-novēršanas-nodaļa
+ name: "Diskriminācijas novēršanas nodaļa"
+ handles_topics: [discrimination]
+ primary_role: "diskriminacijas-jurists"
+ escalation_role: "nodalas-vaditajs"
+
+ - id: pilsonisko-un-politisko-tiesību-nodaļa
+ name: "Pilsonisko un politisko tiesību nodaļa"
+ handles_topics: [prisoner-rights, law-enforcement-rights, privacy-rights]
+ primary_role: "pilsonisko-tiesibu-jurists"
+ escalation_role: "nodalas-vaditajs"
+
+ - id: sociālo-ekonomisko-un-kultūras-tiesību-nodaļa
+ name: "Sociālo, ekonomisko un kultūras tiesību nodaļa"
+ handles_topics: [health-rights, social-rights]
+ primary_role: "socialo-tiesibu-jurists"
+ escalation_role: "nodalas-vaditajs"
+
+ - id: vispārējās-uzraudzības-nodaļa
+ name: "Vispārējās uzraudzības nodaļa"
+ handles_topics: [good-governance]
+ primary_role: "visparejas-uzraudzibas-jurists"
+ escalation_role: "nodalas-vaditajs"
+
+ - id: klientu-apkalpošanas-centrs
+ name: "Klientu apkalpošanas centrs"
+ handles_topics: [other]
+ primary_role: "klientu-apkalposanas-specialists"
+ escalation_role: "klientu-apkalposanas-vaditajs"
+ note: "Catch-all for unclassified complaints; staff reclassifies and forwards."
diff --git a/resources/guardrails.yaml b/resources/guardrails.yaml
new file mode 100644
index 0000000..4c4bf7a
--- /dev/null
+++ b/resources/guardrails.yaml
@@ -0,0 +1,82 @@
+# Guardrails policy for the Ombudsman complaint-intake process.
+# Loaded by the runtime at session start; enforced by the host at every ai.* invocation.
+# Aligns with EU AI Act §14 (human oversight) and §10 (data governance) for high-risk systems.
+
+scope:
+ jurisdiction: lv
+ domain: public-sector-oversight
+ legal_basis:
+ - "Iesniegumu likums"
+ - "Tiesībsarga likums"
+ - "Administratīvā procesa likums"
+ - "Vispārīgā datu aizsardzības regula (GDPR)"
+ high_risk_classification: "EU AI Act Annex III §5(a) and §8(a)"
+
+data_protection:
+ pii_redactor: required
+ forbidden_inputs_to_ai:
+ - personas_kods # Latvian personal identity code
+ - bank_account_numbers
+ - exact_home_address
+ - children_personal_names
+ - health_record_numbers
+ default_redaction_categories:
+ - pii_name
+ - pii_id_number
+ - pii_address
+ - pii_financial
+ - pii_health
+ retention:
+ audit_chain_years: 10
+ ai_invocation_logs_years: 2
+
+ai:
+ allowed_models:
+ - claude-opus-4-7
+ - claude-sonnet-4-6
+ forbidden_models:
+ - "*-uncensored"
+ min_confidence_for_unattended_use: 0.90
+ decisions_ai_may_make_unattended: [] # Empty by design at v0.1 — no AI-only decisions
+ decisions_ai_may_recommend:
+ - topic_classification
+ - priority_estimate
+ - department_routing
+ - response_drafting
+
+human_oversight:
+ required_for:
+ - final_classification_acceptance
+ - response_dispatch
+ - case_closure
+ reviewer_roles:
+ - "berna-tiesibu-jurists"
+ - "diskriminacijas-jurists"
+ - "pilsonisko-tiesibu-jurists"
+ - "socialo-tiesibu-jurists"
+ - "visparejas-uzraudzibas-jurists"
+ escalation:
+ target_role: "nodalas-vaditajs"
+ triggers:
+ - "ai_confidence_below_threshold"
+ - "constitutional_rights_violation_indicator"
+ - "cross_institutional_coordination_needed"
+
+audit:
+ vc_signature_per_step: required
+ emitter_did: "did:web:tiesibsargs.opendms.dev"
+ audit_sink: "veridocs-register"
+ events_required:
+ - "iesniegums.received"
+ - "iesniegums.pii-redacted"
+ - "iesniegums.facets-extracted"
+ - "iesniegums.classified"
+ - "iesniegums.routed"
+ - "iesniegums.persisted"
+
+regulatory_sandbox:
+ programme: "lv-mic-ai-regulatory-sandbox"
+ participating_authorities:
+ - "VARAM"
+ - "DVI"
+ scope_definition_url: "https://github.com/UAPFormat/UAPF-IP/blob/main/profiles/02-orchestrated-process.md"
diff --git a/resources/tiesibsargs-taxonomy.yaml b/resources/tiesibsargs-taxonomy.yaml
new file mode 100644
index 0000000..5bf3435
--- /dev/null
+++ b/resources/tiesibsargs-taxonomy.yaml
@@ -0,0 +1,67 @@
+# Canonical complaint topic taxonomy for the Office of the Ombudsman.
+# Used by classify-topic DMN and referenced in department-roster.yaml.
+# Versioned with the package; changes go through the package release cycle.
+
+version: 1.0.0
+topics:
+ - id: child-rights
+ label_lv: "Bērnu tiesības"
+ label_en: "Children's rights"
+ description: "Tiesību pārkāpumi attiecībā uz bērniem, tostarp bāriņtiesu darbība, izglītības tiesības, aizgādības strīdi."
+ legal_anchors:
+ - "Bērnu tiesību aizsardzības likums"
+ - "ANO Bērna tiesību konvencija"
+
+ - id: discrimination
+ label_lv: "Diskriminācija"
+ label_en: "Discrimination"
+ description: "Diskriminācija pēc rases, dzimuma, vecuma, invaliditātes, reliģijas, seksuālās orientācijas vai citām pazīmēm."
+ legal_anchors:
+ - "Likums 'Par tiesnešu disciplināro atbildību'"
+ - "Direktīva 2000/43/EK"
+
+ - id: prisoner-rights
+ label_lv: "Ieslodzīto tiesības"
+ label_en: "Prisoner rights"
+ description: "Tiesību pārkāpumi ieslodzījuma vietās, soda izpildē, drošības iestādēs."
+ legal_anchors:
+ - "Latvijas Sodu izpildes kodekss"
+ - "Eiropas Cilvēktiesību konvencijas 3. pants"
+
+ - id: law-enforcement-rights
+ label_lv: "Tiesības attiecībās ar tiesībaizsardzību"
+ label_en: "Rights in relation to law enforcement"
+ description: "Sūdzības par policijas, robežsardzes, pierobežas dienesta vai citu tiesībaizsardzības iestāžu darbībām."
+
+ - id: health-rights
+ label_lv: "Tiesības uz veselības aprūpi"
+ label_en: "Health-care rights"
+ description: "Veselības aprūpes pieejamība, kvalitāte, pacientu tiesības."
+ legal_anchors:
+ - "Pacientu tiesību likums"
+
+ - id: social-rights
+ label_lv: "Sociālās tiesības"
+ label_en: "Social rights"
+ description: "Sociālie pakalpojumi, pabalsti, pensijas, invaliditātes tiesības."
+
+ - id: privacy-rights
+ label_lv: "Tiesības uz privāto dzīvi"
+ label_en: "Privacy rights"
+ description: "Personas datu aizsardzība, privātās dzīves neaizskaramība, novērošana."
+ legal_anchors:
+ - "Fizisko personu datu aizsardzības likums"
+ - "GDPR"
+
+ - id: good-governance
+ label_lv: "Labas pārvaldības princips"
+ label_en: "Good governance"
+ description: "Publiskās pārvaldes lēmumi, kas pārkāpj labas pārvaldības principu — neproporcionāli, neobjektīvi, neefektīvi."
+ legal_anchors:
+ - "Administratīvā procesa likuma 4. pants"
+ note: "Vislielākā kategorija pēc Tiesībsarga biroja 2025. gada pārskata."
+
+ - id: other
+ label_lv: "Cits"
+ label_en: "Other"
+ description: "Klasifikators rezerves variants — jurists pārklasificē manuāli."
diff --git a/tests/expected-classifications.json b/tests/expected-classifications.json
new file mode 100644
index 0000000..c91ec29
--- /dev/null
+++ b/tests/expected-classifications.json
@@ -0,0 +1,98 @@
+{
+ "version": "0.1.0",
+ "tests": [
+ {
+ "fixture": "sample-good-governance-complaint.json",
+ "expectedFacets": {
+ "mentionsChildren": false,
+ "mentionsDiscrimination": false,
+ "mentionsPrisons": false,
+ "mentionsPolice": false,
+ "mentionsHealth": false,
+ "mentionsSocialServices": false,
+ "mentionsPrivacy": false,
+ "mentionsPublicAdministration": true,
+ "vulnerablePerson": false,
+ "urgency": false,
+ "ongoingHarm": false
+ },
+ "expectedClassifyTopic": {
+ "rulesFired": ["R8_pubadmin"],
+ "outputs": { "topic": "good-governance", "topicConfidence": 0.78 }
+ },
+ "expectedDeterminePriority": {
+ "rulesFired": ["P6_default"],
+ "outputs": { "priority": "normal", "slaHours": 720 }
+ },
+ "expectedRouteToDepartment": {
+ "rulesFired": ["D8_gov"],
+ "outputs": {
+ "department": "Vispārējās uzraudzības nodaļa",
+ "reviewerRole": "visparejas-uzraudzibas-jurists"
+ }
+ }
+ },
+ {
+ "fixture": "sample-child-rights-complaint.json",
+ "expectedFacets": {
+ "mentionsChildren": true,
+ "mentionsDiscrimination": false,
+ "mentionsPrisons": false,
+ "mentionsPolice": false,
+ "mentionsHealth": false,
+ "mentionsSocialServices": true,
+ "mentionsPrivacy": false,
+ "mentionsPublicAdministration": false,
+ "vulnerablePerson": true,
+ "urgency": false,
+ "ongoingHarm": false
+ },
+ "expectedClassifyTopic": {
+ "rulesFired": ["R1_child"],
+ "outputs": { "topic": "child-rights", "topicConfidence": 0.92 }
+ },
+ "expectedDeterminePriority": {
+ "rulesFired": ["P3_child_high"],
+ "outputs": { "priority": "high", "slaHours": 168 }
+ },
+ "expectedRouteToDepartment": {
+ "rulesFired": ["D1_child"],
+ "outputs": {
+ "department": "Bērna tiesību nodaļa",
+ "reviewerRole": "berna-tiesibu-jurists"
+ }
+ }
+ },
+ {
+ "fixture": "sample-discrimination-complaint.json",
+ "expectedFacets": {
+ "mentionsChildren": false,
+ "mentionsDiscrimination": true,
+ "mentionsPrisons": false,
+ "mentionsPolice": false,
+ "mentionsHealth": false,
+ "mentionsSocialServices": false,
+ "mentionsPrivacy": false,
+ "mentionsPublicAdministration": false,
+ "vulnerablePerson": true,
+ "urgency": true,
+ "ongoingHarm": false
+ },
+ "expectedClassifyTopic": {
+ "rulesFired": ["R2_discrim"],
+ "outputs": { "topic": "discrimination", "topicConfidence": 0.9 }
+ },
+ "expectedDeterminePriority": {
+ "rulesFired": ["P2_urgent_vulnerable"],
+ "outputs": { "priority": "urgent", "slaHours": 48 }
+ },
+ "expectedRouteToDepartment": {
+ "rulesFired": ["D2_discrim"],
+ "outputs": {
+ "department": "Diskriminācijas novēršanas nodaļa",
+ "reviewerRole": "diskriminacijas-jurists"
+ }
+ }
+ }
+ ]
+}