
# Gerçek Zamanlı Soru Formu Doğruluğu için AI ile Sürekli Politika Sapma Tespiti

## Giriş  

Güvenlik soru formları, uyum denetimleri ve satıcı değerlendirmeleri, B2B SaaS ekosisteminde güvenin can damarıdır. Ancak çoğu soru formu otomasyon aracının **statik yapısı**, bir politika değiştiği, yeni bir düzenleme yayınlandığı veya bir iç kontrol güncellendiği anda yanıtların eski kalmasına yol açan gizli bir riski beraberinde getirir.  

**Politika sapması** – belgelenmiş politikalar ile organizasyonun gerçek durumu arasındaki fark – sessiz bir uyum katili gibidir. Geleneksel manuel incelemeler, sapmayı yalnızca bir ihlal ya da başarısız denetim sonrasında yakalar ve maliyetli iyileştirme döngülerine yol açar.

İşte **Sürekli Politika Sapma Tespiti (CPDD)**, Procurize platformunun kalbinde çalışan AI destekli bir motor. CPDD, her politika kaynağını sürekli izler, değişiklikleri birleşik bir bilgi grafiğine haritalar ve etki sinyallerini gerçek zamanlı olarak soru formu şablonlarına aktarır. Sonuç, **dönemsel manuel yeniden doğrulama ihtiyacı olmadan her zaman taze, denetime hazır yanıtlar**dır.

Bu makalede:

1. Politika sapmasının soru formu doğruluğu için neden kritik olduğunu açıklayacağız.  
2. CPDD mimarisini, veri alımını, bilgi‑grafi senkronizasyonunu ve AI‑tabanlı etki analizini detaylandıracağız.  
3. CPDD’nin mevcut Procurize iş akışı (görev atama, yorumlama ve kanıt bağlama) ile nasıl bütünleştiğini göstereceğiz.  
4. Bir Mermaid diyagramı ve örnek kod parçacıkları içeren somut bir uygulama kılavuzu sunacağız.  
5. Ölçülebilir faydaları ve CPDD’yi benimseyen ekipler için en iyi uygulama ipuçlarını tartışacağız.

---

## 1. Politika Sapması Neden Kritik Bir Güvenlik Açığıdır?  

| Semptom | Temel Neden | İş Etkisi |
|---------|------------|-----------|
| **Eski güvenlik kontrolleri** soru formu yanıtlarında | Politikalar merkezi depoda güncellenir ancak soru formu şablonunda yansıtılmaz | Denetimlerde başarısızlık, anlaşma kaybı |
| **Düzenleyici uyumsuzluk** | Yeni düzenleme yayınlanır, uyum matrisi yenilenmez | Para cezaları, yasal risk |
| **Kanıt tutarsızlığı** | Kanıt öğeleri (ör. tarama raporları) eski kalır, hâlâ güncel olarak gösterilir | İtibar kaybı |
| **Manuel yeniden iş yükünün artması** | Politikada bir sürüm artışı sonrası ekipler “ne değişti?” diye saatler harcar | Verimlilik kaybı |

**İstatistiksel olarak**, Gartner 2026 yılına kadar **%30’unun en az bir uyum ihlali yaşayacağını** ve bunun **eski politika dokümantasyonu** nedeniyle ortaya çıkacağını öngörüyor. Gizli maliyet sadece ihlal değil; aynı zamanda **sonradan soru formu yanıtlarını uzlaştırmak için harcanan zamandır**.

Sürekli tespit, *sonradan* paradigmasını ortadan kaldırır. Sapma **gerçek zamanlı ortaya çıktığında** CPDD şu avantajları sunar:

- **Sıfır‑Dokunma Yanıt Yenilemesi** – Temel kontrol değiştiğinde yanıtlar otomatik güncellenir.  
- **Proaktif Risk Puanlama** – Etkilenen soru formu bölümleri için güven puanları anında yeniden hesaplanır.  
- **Denetim İzleme Bütünlüğü** – Her sapma olayı, “kim, ne, ne zaman, neden” bilgileriyle izlenir ve düzenleyicilerin “kanıt zinciri” taleplerini karşılar.

---

## 2. CPDD Mimari Genel Görünümü  

Aşağıda CPDD motorunun Procurize içindeki yüksek‑seviye temsili yer almaktadır.  

```mermaid
graph LR
    subgraph "Source Ingestion"
        A["Policy Repo (GitOps)"] 
        B["Regulatory Feed (RSS/JSON)"]
        C["Evidence Store (S3/Blob)"]
        D["Change Logs (AuditDB)"]
    end

    subgraph "Core Engine"
        E["Policy Normalizer"] 
        F["Knowledge Graph (Neo4j)"]
        G["Drift Detector (LLM + GNN)"]
        H["Impact Analyzer"]
        I["Auto‑Suggest Engine"]
    end

    subgraph "Platform Integration"
        J["Questionnaire Service"]
        K["Task Assignment"]
        L["Comment & Review UI"]
        M["Audit Trail Service"]
    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
```

**Ana bileşenlerin açıklamaları**

1. **Source Ingestion** – Git‑tabanlı politika deposu (IaC tarzı), düzenleyici beslemeleri (NIST, GDPR güncellemeleri), kanıt kasaları ve CI/CD hatlarından gelen değişiklik günlüklerini çeşitli kaynaklardan çeker.  
2. **Policy Normalizer** – Farklı belge biçimlerini (Markdown, YAML, PDF) **kanonik formata** (JSON‑LD) dönüştürerek graf yüklemesi için hazırlanmasını sağlar. Versiyon, yürürlük tarihi ve sorumlu sahibi gibi meta verileri de ayıklar.  
3. **Knowledge Graph (Neo4j)** – Politikalar, kontroller, kanıtlar ve düzenleyici maddeleri **düğüm** ve **ilişki** (ör. *“uyguluyor”*, *“gerektiriyor”*, *“etkiliyor”*) olarak saklar. Bu grafik, uyum semantiği için tek gerçek kaynaktır.  
4. **Drift Detector** – Hibrid bir model:  
   - **LLM** doğal dildeki değişiklik açıklamalarını yorumlayıp anlamsal sapmayı işaretler.  
   - **Graph Neural Network (GNN)** düğüm gömmelerini karşılaştırarak yapısal sapmayı ölçer.  
5. **Impact Analyzer** – Grafı gezerek, tespit edilen sapmanın hangi soru formu öğelerini, kanıtları ve risk puanlarını etkilediğini belirler.  
6. **Auto‑Suggest Engine** – **Retrieval‑Augmented Generation (RAG)** kullanarak soru formu yanıtları, kanıt bağlantıları ve risk puanları için önerilen güncellemeleri üretir.  
7. **Platform Integration** – Önerileri Soru Formu Servisine iterek görev oluşturur, UI’da yorumları gösterir ve tüm olayları Audit Trail Servisine kaydeder.

---

## 3. CPDD Nasıl Çalışır: Uçtan Uca Akış  

### Adım 1: Alım Tetikleyicisi  
Bir geliştirici, `access_logging.yaml` adlı yeni politika dosyasını GitOps politika deposuna birleştirir. Depo webhook’u, Procurize’ın Alım Servisine bildirim gönderir.  

### Adım 2: Normalizasyon & Grafik Güncellemesi  
Policy Normalizer şu verileri ayıklar:

```yaml
policy_id: "POL-00123"
title: "Erişim Günlüğü Gereksinimleri"
effective_date: "2025-10-15"
controls:
  - id: "CTRL-LOG-01"
    description: "Tüm ayrıcalıklı erişimler 12 ay boyunca günlüklenmelidir"
    evidence: "logging_config.json"
```

Bu düğümler Neo4j’e upsert edilerek `CTRL-LOG-01` düğümüne bağlanır.  

### Adım 3: Sapma Tespiti  
GNN, `CTRL-LOG-01` için gömme değerlerini önceki ve sonraki sürümde karşılaştırır. LLM ise commit mesajını “Log saklama süresini 6 aydan 12 aya uzat” olarak işler. İki model de **anlamsal sapma** olduğunu onaylar.  

### Adım 4: Etki Analizi  
Graf geçişi şunları bulur:  

- Soru formu **Q‑001** (“Ayrıcalıklı erişim günlüklerini ne kadar saklıyorsunuz?”) şu an “6 ay” olarak yanıtlanıyor.  
- Kanıt öğesi **E‑LOG‑CONFIG** hâlâ `retention: 6m` değerini gösteriyor.  

### Adım 5: Otomatik Öneri & Görev Oluşturma  
Auto‑Suggest Engine şu önerileri hazırlar:  

- **Yanıt Güncellemesi**: “Ayrıcalıklı erişim günlüklerini **12 ay** saklıyoruz.”  
- **Kanıt Güncellemesi**: Güncellenmiş `logging_config.json` dosyasını ekle.  
- **Risk Puanı Ayarı**: Güven puanını 0.84’ten 0.96’ya yükselt.  

Bu önerilerle bir görev, Uyum Sorumlusuna 24 saat içinde tamamlanması şartıyla atanır.  

### Adım 6: İnsan İncelemesi ve Kaydetme  
Sorumlu, UI’da öneriyi inceler, onaylar ve soru formu versiyonu otomatik olarak güncellenir. Audit Trail, sapma olayı, öneriler ve onay eylemini kaydeder.  

### Adım 7: Sürekli Döngü  
Yeni bir düzenleyici NIST kontrolü yayınlandığında aynı döngü tekrarlanır; böylece soru formu hiçbir zaman güncelliğini yitirmaz.  

---

## 4. Uygulama Kılavuzu  

### 4.1. Alım Boru Hattını Kurma  

```goat
# goat syntax sadece örnek amaçlıdır; gerçek kod Python’dadır
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. Normalizer Örneği (Python)

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

def load_policy(file_path: Path):
    raw = yaml.safe_load(file_path.read_text())
    # kanonik dönüşüm
    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‑code, Neo4j driver örnek bir `graph` nesnesi varsayılır
    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. Sapma Tespitçisi (Hibrit Model)

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

# Metinsel sapma için LLM
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()   # indeks 1 = drift
    return prob > 0.7

# Yapısal sapma için GNN
class DriftGNN(geom_nn.MessagePassing):
    # basitleştirilmiş örnek
    ...

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

### 4.4. Etki Analizörü Sorgusu (Cypher)

```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. RAG ile Otomatik Öneri

```python
from langchain import OpenAI, RetrievalQA

vector_store = ...   # mevcut yanıtların gömmeleri
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']}" açıklaması şu şekilde değişti:
    "{new_control['desc']}". Buna göre yanıtı güncelle ve yeni kanıt "{new_control['evidence']}" adresini referans göster. Güncellenmiş yanıtı düz metin olarak ver."""
    return llm(prompt)
```

### 4.6. Görev Oluşturma (REST)

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

{
  "title": "Erişim Günlüğü için soru formu yanıtını güncelle",
  "assignee": "compliance_owner@example.com",
  "due_in_hours": 24,
  "payload": {
    "question_id": "Q-001",
    "suggested_answer": "...",
    "evidence_path": "logging_config.json"
  }
}
```

---

## 5. Faydalar & Ölçümler  

| Ölçüt | Önce CPDD | Sonra CPDD (Ortalama) | İyileşme |
|-------|-----------|-----------------------|----------|
| **Soru formu dönüş süresi** | 7 gün | 1.5 gün | %78 daha hızlı |
| **Manuel sapma inceleme süresi** | 12 saat / ay | 2 saat / ay | %83 azaldı |
| **Denetime hazır güven puanı** | 0.71 | 0.94 | +0.23 |
| **Düzenleyici ihlal vakası** | 3 / yıl | 0 / yıl | %100 azaldı |

### En İyi Uygulama Kontrol Listesi  

1. **Her politikayı sürüm kontrolüne alın** – Git ile imzalı commit’ler kullanın.  
2. **Düzenleyici akışları hizalayın** – Resmi RSS/JSON uç noktalarına abone olun.  
3. **Net sorumluluk tanımlayın** – Her politika düğümünü bir sorumlu kişiyle eşleştirin.  
4. **Sapma eşiklerini belirleyin** – LLM güveni ve GNN mesafesini, gürültüyü önlemek için ayarlayın.  
5. **CI/CD ile bütünleştirin** – Politika değişikliklerini birinci sınıf varlık olarak ele alın.  
6. **Denetim loglarını izleyin** – Her sapma olayının değiştirilemez ve aranabilir olmasını sağlayın.

---

## 6. Gerçek Dünya Örneği (Procurize Müşteri X)

**Arka Plan** – Müşteri X, 30 satıcıya karşı 120 güvenlik soru formu yönetiyordu ve politika güncellemeleri ile soru formu yanıtları arasındaki gecikme ortalama 5 gün idi.

**Uygulama** – CPDD’yi mevcut Procurize kurulumlarına entegre etti. Politikaları GitHub’da, AB düzenleyici akışıyla bağladı ve yanıt güncellemeleri için otomatik önerileri etkinleştirdi.

**Sonuçlar (3‑ay pilot)**  

- **Dönüş süresi** 5 günden 0.8 güne düştü.  
- **Uyum ekibi tasarruf edilen saat**: ayda 15 saat.  
- **Güncel soru formu içeriğiyle ilgili denetim bulgusu** yok.  

Müşteri, **audit‑trail görünürlüğünü** en değerli özellik olarak belirtti; bu özellik **ISO 27001**’in “değişikliklerin dökümante edilmiş kanıtı” gereksinimini karşıladı.

---

## 7. Gelecek Geliştirmeler  

1. **Sıfır‑Bilgi Kanıtı Entegrasyonu** – Ham veriyi ifşa etmeden kanıt doğrulaması.  
2. **Kiracılar Arası Federated Learning** – Veri gizliliğini korurken sapma modellerini paylaşma.  
3. **Tahmini Politika Sapma Öngörüsü** – Zaman serisi modelleriyle yaklaşan düzenleyici değişiklikleri öngörme.  
4. **Sesli İnceleme** – Güvenli ses komutlarıyla öneri onayı sağlama.

---

## Sonuç  

Sürekli Politika Sapma Tespiti, uyum dünyasını **reaktif yangın söndürmeden proaktif güvenceye** dönüştürüyor. AI‑tabanlı anlamsal analiz, grafik‑temelli etki yayılımı ve sorunsuz platform bütünleşmesi sayesinde Procurize, her güvenlik soru formu yanıtının organizasyonun mevcut durumunu doğru yansıtmasını sağlıyor.

CPDD’yi benimseyerek **manuel çabayı kırpın**, **denetim güveninizi artırın** ve **sürekli değişen düzenleyici ortamda uyum durumunuzu geleceğe hazırlayın**.

*Politika sapmasını soru formu iş akışınızdan kaldırmaya hazır mısınız?* Procurize ekibiyle iletişime geçin ve uyum otomasyonunun bir sonraki neslini deneyimleyin.