
# Nuolatinis politikos nuokrypio aptikimas dirbtinio intelekto pagalba realaus laiko klausimyno tikslumui

## Įvadas  

Saugumo klausimynai, atitikties auditai ir tiekėjų įvertinimai – tai pasitikėjimo pagrindas B2B SaaS ekosistemoje. Tačiau **daugumos klausimyno automatizavimo įrankių stacionari prigimtis** sukuria slaptą riziką: atsakymai, kuriuos jie generuoja, gali greitai pasensti, kai tik pasikeičia politika, paskelbtas naujas reglamentas arba atnaujinama vidinė kontrolė.  

**Politikos nuokrypis** – tai neatitikimas tarp dokumentuotų politikų ir faktinės organizacijos būsenos – yra tylus atitikties žudikas. Tradiciniai rankiniai peržiūrėjimai aptinka nuokrypį tik po pažeidimo ar nesėkmingo audito, sukeldami brangius atkūrimo ciklus.

Įsivaizduokite **Nuolatinį politikos nuokrypio aptikimą (CPDD)** – dirbtinio intelekto varomą variklį, esantį Procurize platformos širdyje. CPDD nuolatos stebi kiekvieną politikos šaltinį, atvaizduoja pokyčius vieningame žinių grafe ir realiu laiku perduoda poveikio signalus į klausimyno šablonus. Rezultatas – **visada šviežūs, auditui paruošti atsakymai** be būtinybės kiekvieną ketvirtį atlikti pilną rankinį patikrinimą.

Šiame straipsnyje aptarsime:

1. Kodėl politikos nuokrypis svarbus klausimyno tikslumui.  
2. CPDD architektūrą – duomenų įsisavinimą, žinių grafo sinchronizavimą ir dirbtinio intelekto valdomą poveikio analizę.  
3. Kaip CPDD integruojamas į esamą Procurize darbo eigą (užduočių paskyrimas, komentarai ir įrodymų susiejimas).  
4. Konkretų įgyvendinimo vadovą su „Mermaid“ diagramomis ir pavyzdiniais kodų fragmentais.  
5. Matomų naudos rodiklius ir geriausias praktikas komandų, įgyvendinančių CPDD.

---

## 1. Kodėl politikos nuokrypis yra kritinė pažeidžiamybė  

| Simptomai | Šakninis priežastis | Verslo poveikis |
|----------|---------------------|-----------------|
| **Pasenę saugumo kontrolės** klausimyno atsakymuose | Politikos atnaujinamos centralioje saugykloje, bet neatsispindi klausimyno šablone | Nepavykę auditai, prarasti sandoriai |
| **Reguliavimo neatitikimas** | Paskelbtas naujas reglamentas, tačiau atitikties matrica neatsinaujina | Baudos, teisinė rizika |
| **Įrodymų nesuderinamumas** | Įrodymų artefaktai (pvz., skenavimo ataskaitos) senstami, bet vis dar cituojami kaip aktualūs | Įmonės reputacijos žala |
| **Rankinio darbo augimas** | Komandos praleidžia valandas ieškodamos „kas pasikeitė?“ po politikos versijos pakėlimo | Produktyvumo nuostoliai |

**Statistiniai duomenys** rodo, kad Gartner prognozuoja iki 2026 m. **30 % įmonių patirs bent vieną atitikties pažeidimą dėl pasenusių politikos dokumentų**. Paslėpta kaina ne tik pažeidimas, bet ir **laikas, praleistas suderinant klausimyno atsakymus po įvykio**.

Nuolatinis aptikimas pašalina „po įvykio“ paradigmą. Išryškindamas nuokrypį **ties pat įvykio momentu**, CPDD leidžia:

- **Nulinio prisilietimo atsakymų atnaujinimą** – automatiškai atnaujinti atsakymus, kai keičiasi pagrindinė kontrolė.  
- **Proaktyvų rizikos įvertinimą** – iš karto perskaičiuoti pasitikėjimo balus paveiktoms klausimyno dalims.  
- **Audito takelio vientisumą** – kiekvienas nuokrypio įvykis registruojamas su atsekama kilme, tenkinančia reguliatorių reikalavimus dėl „kas, ką, kada, kodėl“.

---

## 2. CPDD architektūros apžvalga  

Žemiau pateikiamas aukšto lygio CPDD variklio atvaizdas Procurize platformoje.  

```mermaid
graph LR
    subgraph "Šaltinių įsisavinimas"
        A["Politikos saugykla (GitOps)"] 
        B["Reguliavimo srautas (RSS/JSON)"]
        C["Įrodymų saugykla (S3/Blob)"]
        D["Keitimų žurnalas (AuditDB)"]
    end

    subgraph "Pagrindinis variklis"
        E["Politikos normalizatorius"] 
        F["Žinių grafas (Neo4j)"]
        G["Nuokrypio detektorius (LLM + GNN)"]
        H["Poveikio analizatorius"]
        I["Automatinio pasiūlymo variklis"]
    end

    subgraph "Platformos integracija"
        J["Klausimyno paslauga"]
        K["Užduočių paskyrimas"]
        L["Komentarų ir peržiūros UI"]
        M["Audito takelio paslauga"]
    end

    A --> E
    B --> E
    C --> E
    D --> E
    E --> F
    F --> G
    G --> H
    H --> I
    I --> J
    J --> K
    K --> L
    H --> M
```

**Pagrindinės komponentės**

1. **Šaltinių įsisavinimas** – surenka duomenis iš kelios vietos: Git‑valdomos politikos saugyklos (IaC stilius), reguliavimo srautų (pvz., NIST, GDPR atnaujinimai), įrodymų saugyklų ir CI/CD keitimų žurnalų.

2. **Politikos normalizatorius** – konvertuoja įvairius politikos dokumentų formatus (Markdown, YAML, PDF) į **kanoninią struktūrą** (JSON‑LD), tinkamą grafo įkėlimui. Išskiria metaduomenis, tokius kaip versija, įsigaliojimo data ir atsakingas savininkas.

3. **Žinių grafas (Neo4j)** – saugo politikos, kontrolės, įrodymų ir reguliavimo nuostatas kaip **mazgus** ir **santykius** (pvz., *„įgyvendina“*, *„reikalauja“*, *„veikia“*). Tai yra vienintelis tiesioginės atitikties semantikos šaltinis.

4. **Nuokrypio detektorius** – hibridinė sistema:  
   - **LLM** interpretuoja natūralios kalbos keitimų aprašymus ir žymi semantinį nuokrypį.  
   - **Grafinis neuroninis tinklas (GNN)** apskaičiuoja struktūrinį nuokrypį, lygindamas mazgų įterpimus tarp versijų.

5. **Poveikio analizatorius** – peržvelgia grafiką, kad nustatytų tiesioginį poveikį klausimyno elementams, įrodymų artefaktams ir rizikos vertinimams.

6. **Automatinio pasiūlymo variklis** – generuoja rekomenduojamus atnaujinimus klausimyno atsakymams, įrodymams ir rizikos balams, naudodamas **Retrieval‑Augmented Generation (RAG)**.

7. **Platformos integracija** – nesukelia pertraukų: pasiūlymai įkeliami į Klausimyno paslaugą, kuriant užduotis savininkams, rodomi komentarai UI, o viskas fiksuojama Audito takelyje.

---

## 3. CPDD veiksmas: nuo pradžios iki pabaigos  

### Žingsnis 1: Įsisavinimo trigeris  
Kūrėjas įkelia naują politikos failą `access_logging.yaml` į GitOps saugyklą. Saugyklos webhookas informuoja Procurize Įsisavinimo paslaugą.

### Žingsnis 2: Normalizavimas ir grafo atnaujinimas  
Politikos normalizatorius išgauna:

```yaml
policy_id: "POL-00123"
title: "Prieigos registravimo reikalavimai"
effective_date: "2025-10-15"
controls:
  - id: "CTRL-LOG-01"
    description: "Visa privilegijuota prieiga turi būti registruojama 12 mėnesių"
    evidence: "logging_config.json"
```

Šie mazgai **upsertinami** į Neo4j, susiejant su egzistuojančiu `CTRL-LOG-01` mazgu.

### Žingsnis 3: Nuokrypio aptikimas  
GNN palygina `CTRL-LOG-01` įterpimus prieš ir po įkelimo. LLM analizuoja įkėlimo pranešimą: „Pratęsti registracijos laikotarpį nuo 6 mėnesių iki 12 mėnesių“. Abu modeliai sutarus, kad įvyko **semantinis nuokrypis**.

### Žingsnis 4: Poveikio analizė  
Grafinis kelias rodo:  

- Klausimynas **Q‑001** („Kiek laiko saugote privilegijuotą prieigą?“) šiuo metu atsako „6 mėnesiai“.  
- Įrodymo artefaktas **E‑LOG‑CONFIG** (konfigūracijos failas) vis dar nurodo `retention: 6m`.

### Žingsnis 5: Automatinis pasiūlymas ir užduoties kūrimas  
Automatinio pasiūlymo variklis kuria:  

- **Atsakymo atnaujinimą**: „Mes saugome privilegijuotą prieigą **12 mėnesių**.“  
- **Įrodymo atnaujinimą**: Prisegti naują `logging_config.json` su atnaujintu laikotarpiu.  
- **Rizikos balo korekciją**: Padidinti pasitikėjimą nuo 0,84 iki 0,96.

Užduotis skiriama Atitikties savininkui su 24 valandų terminu.

### Žingsnis 6: Žmogaus peržiūra ir patvirtinimas  
Savininkas peržiūri pasiūlymą UI, patvirtina ir klausimyno versija automatiškai atnaujinama. Audito takelis registruoja nuokrypio įvykį, pasiūlymus ir patvirtinimą.

### Žingsnis 7: Nuolatinis ciklas  
Jei reguliatorius paskelbia naują NIST kontrolę, kuri pakeičia esamą registracijos reikalavimą, tas pats ciklas pasikartoja, užtikrinant, kad klausimyno atsakymai niekada nepasensta.

---

## 4. Įgyvendinimo gidas  

### 4.1. Įsisavinimo konvejerio konfigūracija  

```goat
pipeline:
  - name: git_poll
    type: webhook
    repo: "git@github.com:company/policies.git"
    branch: "main"
  - name: regulator_feed
    type: http_poll
    url: "https://api.regulators.io/v1/updates"
    schedule: "hourly"
  - name: evidence_sync
    type: s3_sync
    bucket: "company-evidence"
    prefix: "compliance/"
```

### 4.2. Normalizatoriaus pavyzdys (Python)

```python
import yaml, json, hashlib
from pathlib import Path

def load_policy(file_path: Path):
    raw = yaml.safe_load(file_path.read_text())
    # kanoninis konvertavimas
    canon = {
        "id": raw["policy_id"],
        "title": raw["title"],
        "effective": raw["effective_date"],
        "controls": [
            {
                "id": c["id"],
                "desc": c["description"],
                "evidence": c["evidence"]
            } for c in raw.get("controls", [])
        ],
        "checksum": hashlib.sha256(file_path.read_bytes()).hexdigest()
    }
    return canon

def upsert_to_neo4j(policy_json):
    # pseudo‑kodas, daro prielaidą, kad egzistuoja Neo4j tvarkyklė `graph`
    graph.run("""
        MERGE (p:Policy {id: $id})
        SET p.title = $title,
            p.effective = $effective,
            p.checksum = $checksum
        WITH p
        UNWIND $controls AS ctrl
        MERGE (c:Control {id: ctrl.id})
        SET c.desc = ctrl.desc
        MERGE (p)-[:IMPLIES]->(c)
        MERGE (c)-[:EVIDENCE]->(:Evidence {path: ctrl.evidence})
    """, **policy_json)
```

### 4.3. Nuokrypio detektorius (hibridiniai modeliai)

```python
from transformers import AutoModelForSequenceClassification, AutoTokenizer
import torch
import torch_geometric.nn as geom_nn

# LLM tekstiniam nuokrypiui
tokenizer = AutoTokenizer.from_pretrained("google/flan-t5-base")
model = AutoModelForSequenceClassification.from_pretrained("flan-t5-base-finetuned-drift")

def textual_drift(commit_msg: str) -> bool:
    inputs = tokenizer(commit_msg, return_tensors="pt")
    logits = model(**inputs).logits
    prob = torch.softmax(logits, dim=-1)[0,1].item()   # indeksas 1 = nuokrypis
    return prob > 0.7

# GNN struktūriniam nuokrypiui
class DriftGNN(geom_nn.MessagePassing):
    # supaprastintas pavyzdys
    ...

def structural_drift(old_emb, new_emb) -> bool:
    distance = torch.norm(old_emb - new_emb)
    return distance > 0.5
```

### 4.4. Poveikio analizatorius – Cypher užklausa  

```cypher
MATCH (c:Control {id: $control_id})-[:EVIDENCE]->(e:Evidence)
MATCH (q:Questionnaire)-[:ASKS]->(c)
RETURN q.title AS questionnaire, q.id AS qid, e.path AS outdated_evidence
```

### 4.5. Automatinio pasiūlymo variklis (RAG)

```python
from langchain import OpenAI, RetrievalQA

vector_store = ...   # atsakymų įterpimų vektorinė saugykla
qa = RetrievalQA.from_chain_type(
    llm=OpenAI(model="gpt-4o-mini"),
    retriever=vector_store.as_retriever()
)

def suggest_update(question_id: str, new_control: dict):
    context = qa.run(f"Current answer for {question_id}")
    prompt = f"""Kontrolė "{new_control['id']}" pakeitė savo aprašymą į:
    "{new_control['desc']}". Atnaujinkite atsakymą atitinkamai ir nurodykite naują įrodymą "{new_control['evidence']}". Pateikite peržiūrėtą atsakymą paprastu tekstu."""
    return llm(prompt)
```

### 4.6. Užduoties kūrimas (REST)

```http
POST /api/v1/tasks
Content-Type: application/json

{
  "title": "Atnaujinti klausimyno atsakymą dėl prieigos registravimo",
  "assignee": "compliance_owner@example.com",
  "due_in_hours": 24,
  "payload": {
    "question_id": "Q-001",
    "suggested_answer": "...",
    "evidence_path": "logging_config.json"
  }
}
```

---

## 5. Nauda ir matomi rodikliai  

| Rodiklis | Prieš CPDD | Po CPDD (vid.) | Patobulinimas |
|----------|-------------|----------------|----------------|
| **Klausimyno įvykdymo laikas** | 7 dienos | 1,5 dienos | –78 % |
| **Rankinio nuokrypio peržiūros pastangos** | 12 h / mėn. | 2 h / mėn. | –83 % |
| **Audito paruošimo pasitikėjimo balas** | 0,71 | 0,94 | +0,23 |
| **Reguliavimo pažeidimų incidentai** | 3 / metai | 0 / metai | –100 % |

### Geriausios praktikos kontrolinis sąrašas  

1. **Kontroliuokite kiekvieną politiką per versijų valdymą** – Git su pasirašytais įsipareigojimais.  
2. **Sujunkite reguliavimo srautus** – prenumeruokite oficialius RSS/JSON kanalus.  
3. **Apibrėžkite aiškų atsakomybės žemėlapį** – susiekite kiekvieną politikos mazgą su atsakingu asmeniu.  
4. **Nustatykite nuokrypio slenksčius** – derinkite LLM patikimumą ir GNN atstumą, kad išvengtumėte triukšmo.  
5. **Integruokite su CI/CD** – traktuokite politikos pakeitimus kaip pagrindinius artefaktus.  
6. **Stebėkite audito žurnalus** – užtikrinkite, kad kiekvienas nuokrypio įvykis būtų nekintamas ir paieškos draugiškas.

---

## 6. Realus atvejis (Procurize klientas X)

**Fonas** – Klientas X, vidutinio dydžio SaaS tiekėjas, tvarkė 120 saugumo klausimynų 30 tiekėjų atžvilgiu. Jie susidūrė su 5‑dienų vidutiniu delšu tarp politikos atnaujinimų ir klausimyno peržiūrų.

**Įgyvendinimas** – Diegė CPDD ant esamos Procurize instancijos. Įkėlė politiką iš GitHub, prijungė ES reguliavimo srautą ir įjungė automatinius pasiūlymus atsakymų atnaujinimui.

**Rezultatai (3‑mėnesio pilotas)**  

- **Įvykdymo laikas** sumažėjo iš 5 dienų iki 0,8 dienų.  
- **Atitikties komandos sutaupytas laikas**: 15 h per mėnesį.  
- **Nėra audito pastebėjimų**, susijusių su pasenusių klausimyno turiniu.  

Klientas ypatingai pabrėžė **audito takelio skaidrumą**, patenkindamas **ISO 27001** „dokumentuoto įvykio įrašo“ reikalavimą.

---

## 7. Ateities plėtrų kryptys  

1. **Zero‑Knowledge įrodymų integracija** – įrodyti įrodymų autentiškumą neatskleidžiant pačių duomenų.  
2. **Federacinis mokymasis tarp nuomininkų** – dalintis nuokrypio detektoriaus modeliais, išlaikant duomenų privatumą.  
3. **Prognozuojamas politikos nuokrypio prognozavimas** – laiko eilučių modeliai, numatantys artėjančius reguliavimo pokyčius.  
4. **Balso valdymo peržiūrą** – leisti atitikties savininkams patvirtinti pasiūlymus per saugius balso komandas.

---

## Išvada  

Nuolatinis politikos nuokrypio aptikimas (CPDD) keičia atitikties valdymą iš **reaktyvaus žvengimo** į **proaktyvią garantiją**. Sujungiant AI‑valdomą semantinį analizavimą, grafinį poveikio sklaidą ir sklandžią platformos integraciją, Procurize užtikrina, kad kiekvienas saugumo klausimyno atsakymas visuomet atspindi organizacijos dabartinę būseną.

Įdiegus CPDD **žymiai sumažėja rankinis darbo krūvis**, **padidėja auditų pasitikėjimas**, o **įmonė apsaugoma nuo nuolat kintančių reguliacinių reikalavimų**.

*Ar pasiruošę pašalinti politikos nuokrypį iš savo klausimyno darbo eigos?* Susisiekite su Procurize komanda ir patirkite kitą atitikties automatizavimo kartą.